/*
 * @Description: 手机号归属地查询工具，根据手机号码获取归属地信息
 * @Author: 莫若省
 * @date: 2025/9/3
 *
 * 功能说明：
 * 1. 支持通过手机号码查询归属地信息
 * 2. 返回省份、城市和运营商信息
 * 3. 适配新的API响应格式
 */

import { MCPToolInterface } from "../../types/index.js";
import { z } from "zod";
import axios from "axios";

// 手机号归属地查询工具生成器
const phoneLocationToolGenerator = (): MCPToolInterface => ({
    name: "手机号归属地查询",
    description: "根据手机号码查询归属地信息，包括省份、城市和运营商",
    prams: {
        phone: z.string().regex(/^1[3-9]\d{9}$/).describe("请输入要查询的11位手机号码，例如：13000000000"),
    },
    cb: async ({ phone }) => {
        try {
            // 构建API请求URL
            const apiUrl = `https://uapis.cn/api/v1/misc/phoneinfo?phone=${encodeURIComponent(phone)}`;

            // 发送HTTP请求获取数据
            const response = await axios.get(apiUrl, {
                timeout: 5000, // 5秒超时
                headers: {
                    'Accept': 'application/json',
                    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
                }
            });

            // 检查响应状态和数据格式
            if (response.status !== 200 || !response.data) {
                return {
                    content: [{
                        text: `手机号归属地API请求失败，状态码: ${response.status}`,
                        type: "text"
                    }]
                };
            }

            const locationData = response.data;

            // 格式化响应数据
            return formatLocationResponse(locationData);

        } catch (error) {
            console.error("手机号归属地查询错误:", error);

            // 处理不同类型的错误
            let errorMessage = "手机号归属地查询失败，请稍后重试";

            if (axios.isAxiosError(error)) {
                if (error.code === 'ECONNABORTED') {
                    errorMessage = "手机号归属地查询请求超时，请检查网络连接";
                } else if (error.response) {
                    errorMessage = error.response.data?.msg || `手机号归属地API服务异常，状态码: ${error.response.status}`;
                } else if (error.request) {
                    errorMessage = "无法连接到手机号归属地服务，请检查网络连接";
                }
            }

            return {
                content: [{
                    text: errorMessage,
                    type: "text"
                }]
            };
        }
    }
});

// 格式化归属地响应
function formatLocationResponse(locationData: {
    province: string;
    city: string;
    sp: string;
}) {
    // 构建归属地信息文本
    const locationText = `手机号归属地信息：\n\n` +
        `省份: ${locationData.province}\n` +
        `城市: ${locationData.city}\n` +
        `运营商: ${locationData.sp}`;

    return {
        content: [
            {
                text: locationText,
                type: "text"
            }
        ]
    };
}

export const phone_location_tool = phoneLocationToolGenerator;